import org.junit.Test;

import java.util.Arrays;

/**
 * 程序只有一个入口
 * 理解：类中只有一个主方法
 *
 * 类中多个类似主方法：单元测试   Junit1.4
 *                  jar  别人写好的类，直接使用
 *单元测试;专门测试功能模块
 *单元测试步骤：
 * 1.编写注解    @Test
 * 2.编写方法    修饰符  方法名
 */

public class 基础语法 {
    /**
     * floot  单精度   不常用   4字节   取小数点后6位有效数
     * 写法:floot  标识符=字面量F/f；
     */
    @Test
    public void basic() {
        float pi = 3.1415926535F;
        System.out.println(pi);//3.1415927
        int a = 128 + 256;
        byte b = (byte) a;
        System.out.println(b);
        String name = "🐓🏀";
        int age = 2_5;
        System.out.println(name + age);
    }

    /**
     * 数组  Array    引用类型       对象，通过new创建
     * 数组相当于一堆相同的“数据”集合
     * 单元测试1：textArray    创建数组方式以及初始化
     */
    @Test
    public void testArray() {
        //创建arr空数组，长度4
        int[] arr = new int[4]; //动态初始化：指定空间，并且按照空间分元素
        int[] arr1 = {1, 2, 3};//静态初始化:直接给定值
        int arr2[] = new int[4];//动态初始化：指定空间，并且按照空间分元素
        int[] arr3 = new int[]{1, 2, 3};//动态初始化：指定空间，并且按照空间分元素
        //从arr1静态初始化数组获取  2  元素     数组名下标[下标:0开始]
        System.out.println(arr1[1]);//输出  2.元素值
        //从arr1静态初始化数组获取   长度
        System.out.println(arr1.length);//输出3
        //从arr1  获取下标为4的值   输出？    数组下标越界异常
        //System.out.println(arr1[4]);
        //  空间长度没有超出范围，数据类型：基础数据类型
        //   int 默认值   0
        //   floot 默认值  0
        //   char  默认值   0
        //   boolean 默认值  false
        int[] arr4 = new int[4];//动态初始化
        System.out.println(arr4[1]);
        float[] arr5 = new float[4];
        System.out.println(arr5[1]);
        char[] arr6 = new char[4];
        System.out.println(arr6[1]);
        boolean[] arr7 = new boolean[4];
        System.out.println(arr7[1]);
    }

    /**
     * 数组遍历【3种迭代方式】
     * 1.普通for  jdk1.5之前使用
     * 2.增强for  jdk1.5之后使用   推荐
     * 3.工具类    推荐
     */
    @Test
    public void testIterate() {
        int[] arr = {1, 2, 3, 4};
        //普通for循环 打印所有元素值  【遍历】
        //    for(int i = 0;i< arr.length;i++){
//             System.out.println(arr[i]);}

//   for(int i:arr){//直接打印元素值   遍历数据类型   引用名：数组名
        //         System.out.println(i);
        //工具类   ttoString方法  打印所有的数组元素
        //   System.out.println(Arrays.toString(arr));
    }

    /**
     * 数组扩容
     * Java数组对象1大小是固定的，数组对象不可以扩展的
     * 使用数据扩容方式变通
     * Arrays.copyOf() 方法：创建数组副本             🐎➕🚩
     */
    @Test
    public void testCopy() {
        char[] arr = {'唐', '山'};//定义数组长度固定
        //使用Arroys提供copyOf方法创建当前数组的副本
        char[] temp = Arrays.copyOf(arr, 4);
        //副本  复制给  不可改变数组
        char[] tarr = temp;
        System.out.println(tarr); //唐  山   /u0000 /u0000
        tarr[2] = '工';
        tarr[3] = '业';
        System.out.println(tarr);
    }

    /**
     * 拓展：数组输出，根据数据类型不同，输出效果不同【看】
     * 数组语法:
     * 数据类型[]  数组名字=new  数据类型[];
     * 数据类型:基础数据类型+引用类型
     * 数据类型:基础数据类型+引用类型
     * 创建数据根据数据类型：明确是什么类型
     */
    @Test
    public void testLook() {
//字符数组
        char[] kun = {'蔡', '徐', '坤'};
        System.out.println(kun);
        //JavaOOP面向对象知识点:数组输出方法提供重载功能，字符数组，优化为字符串

//常规数组输出效果  Arrays工具类 toString方法 打印数组
        System.out.println(Arrays.toString(kun));

        //数值数组
        int[] i = {1, 2};
        System.out.println(i);// [ 数组  I   类型   @  地址值   I@3d82c5f3
//查看数组实际效果
        System.out.println(Arrays.toString(i));
    }

    /**
     * 数组经典案例
     * int[] arr={3,6,4,1}
     * 数组元素排序
     * 选择排序
     * 冒泡排序    双层for循环使用，比较相邻的元素，将元素数组小的值放到前面
     * 插入排序
     */

    @Test
    public void bubbleSort() {
        // int[] arr={3,6,4,1}; //静态数组
        //  for  外层循环【1次】+for 内层 循环【全部】
        //  每一轮需要比较几次
        //for(int i=0;i<arr.length-1;i++){
        //  for(int j=0;j<arr.length-1-i;j++) {//内层for:两个两个比较
        //交换 升序:从小到大
        // if (arr[j] > arr[j + 1]) {
        //   int temp = arr[j];//第一个值交给第三方数组变量
        //   arr[j] = arr[j + 1];//第二个值交给第一个值
        //   arr[j + 1] = temp;//第三方变量交给第二个值
        //   }
        //   }
    }


    @Test
    public void sort() {
        int[] arr = {3, 6, 4, 1};
        //工具类：提供sort()排序方法
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}